import Image, ImageDraw, math, ImageFont

class Rectangulo:
    "Esta classe desenha rectangulos e calcula as suas caractristicas."

    def __init__(self, xi, yi, xf, yf):
        self.pontoinicial = (xi, yi)
        self.pontofinal = (xf, yf)
        self.area = (xf-xi)*(yf-yi)
        self.perimetro = 2*(xf-xi) + 2*(yf-yi)
        self.visivel = 1
        self.imagem = Image.new("RGBA", (300, 350), (0,0,0))

    def grafico(self, xmax, ymax, xmin, ymin):
        self.imagem.putalpha(0)
        desenho = ImageDraw.Draw(self.imagem)
        letra = ImageFont.load_default()
        desenho.rectangle(((self.pontoinicial[0]*(300/(xmax - xmin)))+150,
                           (self.pontoinicial[1]*(350/(ymax - ymin)))+150,
                           (self.pontofinal[0]*(300/(xmax - xmin)))+150,
                           (self.pontofinal[1]*(350/(ymax - ymin)))+150),
                          outline="#000000")
        desenho.text((25,301),"Area = " + str(self.area), font = letra, fill = (0,0,0))
        desenho.text((25,320), "Perimetro = " + str(self.perimetro), font = letra, fill = (0,0,0))
        return self.imagem



class Circunferencia:
    "Esta classe desenha circunferencias e calcula as suas caractristicas."

    def __init__(self, xi, yi, xf, yf):
        self.pontoinicial = (xi, yi)
        self.pontofinal = (xf, yf)
        self.raio = ((xf-xi)**2+(yf-yi)**2)**0.5
        self.area = math.pi*self.raio**2
        self.perimetro = 2*math.pi*self.raio
        self.visivel = 1
        self.imagem = Image.new("RGBA", (300, 350), (0,0,0))

    def grafico(self, xmax, ymax, xmin, ymin):
        self.imagem.putalpha(0)
        desenho = ImageDraw.Draw(self.imagem)
        desenho.arc(((self.pontoinicial[0]*(300/(xmax - xmin)))+150,
                     (self.pontoinicial[1]*(350/(ymax - ymin)))+150,
                     (self.pontofinal[0]*(300/(xmax - xmin)))+150,
                     (self.pontofinal[1]*(350/(ymax - ymin)))+150),
                    0,360,"#000000")
        letra = ImageFont.load_default()
        desenho.text((25,301),"Area = " + str(self.area), font = letra, fill = (0,0,0))
        desenho.text((25,320), "Perimetro = " + str(self.perimetro), font = letra, fill = (0,0,0))
        return self.imagem

class Recta:
    "Esta classe desenha rectas e calcula as suas caractristicas."

    def __init__(self, xi, yi, xf, yf):
        self.pontoinicial = (xi, yi)
        self.pontofinal = (xf, yf)
        self.comprimento = ((xf-xi)**2+(yf-yi)**2)**0.5
        self.visivel = 1
        self.imagem = Image.new("RGBA", (300, 350), (0,0,0))

    def grafico(self, xmax, ymax, xmin, ymin):
        self.imagem.putalpha(0)
        desenho = ImageDraw.Draw(self.imagem)
        desenho.line(((self.pontoinicial[0]*(300/(xmax - xmin)))+150,
                      (self.pontoinicial[1]*(350/(ymax - ymin)))+150,
                      (self.pontofinal[0]*(300/(xmax - xmin)))+150,
                      (self.pontofinal[1]*(350/(ymax - ymin)))+150),
                     fill="#000000")
        letra = ImageFont.load_default()
        desenho.text((25,301),"Comprimento = " + str(self.comprimento), font = letra, fill = (0,0,0))
        return self.imagem
